///////////////////////////////
// Analizador sintactico
///////////////////////////////
parser grammar AnasintGDL;

options {
	tokenVocab = AnalexGDL;
}

entrada 
	: instrucciones EOF
	;
	
instrucciones 
	: (GRAPH DOSPUNTOS LLAVE_ABRIR (tipo)* LLAVE_CERRAR) {System.out.println("Graph");}
	;
	
tipo 
	: nodo (edge)*
	;
	
nodo
	: NODO DOSPUNTOS LLAVE_ABRIR paramnodo LLAVE_CERRAR {System.out.println("Nodo");}
	;
	
paramnodo
	: 
	( PARAM_TITLE DOSPUNTOS ID PARAM_LABEL DOSPUNTOS ID
	| PARAM_LABEL DOSPUNTOS ID PARAM_TITLE DOSPUNTOS ID
	) 
	( PARAM_BORDDESTYLE DOSPUNTOS OPTION_BORDERSTYLE)?
	;
	
	
edge
	: EDGE DOSPUNTOS LLAVE_ABRIR paramedge LLAVE_CERRAR {System.out.println("Edge");}
	;
	
paramedge
	: 
	( PARAM_SOURCE DOSPUNTOS ID
	| PARAM_TARGET DOSPUNTOS ID
	| PARAM_ARROWSTYLE DOSPUNTOS OPTION_ARROWSTYLE
	)*
	;
